#include "Farmer.h"

//ctor
Farmer::Farmer(){
}

//dtor
Farmer::~Farmer(){
}

//getter
Point Farmer::getCurPos(){
	return curPos;
 }

Direction Farmer::getCurDir(){
	return curDir;
}

//berganti arah (UP/LEFT/DOWN/RIGHT)
void Farmer::changeDir(Direction dir){
	curDir = dir;
}

//mendapatkan koordinat di depannya
Point Farmer::getFrontPos(){
	Point pTemp;
	pTemp.x = curPos.x;
	pTemp.y = curPos.y;
	switch(curDir){
		case UP :
			pTemp.x = curPos.x - 1;
		break;
		case DOWN :
			pTemp.x = curPos.x + 1;
		break;
		case RIGHT :
			pTemp.y = curPos.y + 1;
		break;
		case LEFT :
			pTemp.y = curPos.y - 1;
		break;
	}
	return pTemp;
}

//menggerakkan farmer 1 langkah ke depan sesuai arahnya.
bool Farmer::move(Farm& farm) {
	//cek Posisi yang dihadapannya
	if (farm.isEmpty(getFrontPos())){
		//jika point yang ada di hadapannya kosong, maka buat curPos jadi empty dan move
		farm.setEmpty(curPos);
		curPos = getFrontPos();
		//return true untuk menandakan bahwa aksi berhasil
		return true;
	}
	else
		//return true untuk menandakan bahwa aksi gagal
		return false;
}


bool Farmer::water(Farm& farm) {
	// siram Posisi yang dihadapannya
	if (farm.isWaterable(getFrontPos())){
		farm.setWatered(getFrontPos());
		return true;
	}
	else
		return false;
}


bool Farmer::slash(Farm& farm) {
	// slash Posisi yang dihadapannya
	if (farm.isSlashable(getFrontPos())){
		farm.setSlashed(getFrontPos());
		return true;
	}
	else
		return false;
}

//mengetahui harga dari barang tertentu
int Farmer::getPrice(ItemType item){
	//daftar harga dari toko
	StoreInfo storeInfo;
	storeInfo = Resource::instance()->getStoreInfo();
	return storeInfo[item].price;
}

//mengembalikan true bila pemain menghadap ke luar farm
bool Farmer::isFaceOutside(){
	int x = getFrontPos().x;
	int y = getFrontPos().y;
	return ((x<0)||(x>FARM_HEIGHT-1)) || ((y<0)||(y>FARM_WIDTH-1));
}
